3
תגובות

סטרינג זהה, מזוהה כשונה.

פתח mmm ,
אני משווה בין טקסט מסוים, לטקסט שקיבלתי בGET.
הטקסטים זהים לחלוטין, לא פספסתי.
הטקסטים הם למעשה כתובות URL שאני שואב מהם מידע.
הסטרינג הראשון, נכתב ידנית במשתנה, והקישור נפתח מצוין.
הסטרינג השני מגיע מGET, וכאמור, מכיל את אותו טקסט בדיוק, אך מחזיר 404.
בדקתי את הקידוד של 2 הסטרינגים, זהה לחלוטין.
השוואתי MD5 של הטקסטים, הHASH שונה.
לאחר המרה של שני הטקסטים לקידוד אחר, אך זהה, שניהם מקבלים MD5 זהה.
רעיונות? מה גורם לסטרינגים להיות שונים זה מזה?

3 תשובות

avatar ענה intval ב 22 ליוני 2014 #

תעבור בלולאה על שני המחרוזות, תדפיס את הערך המספרי של כל תו (ord) ותוכל לראות באיזה מקום בדיוק המחרוזות שונות.

יכול להיות הבדל אם
הקובץ שמור בתור utf-8 without BOM והקידוד בדפדפן מוגדר לא כutf-8 (או להיפך)
וגם הקישור עצמו מכיל תויים שהם מחוץ לתווך של ascii 0-255

avatar ענה mmm ב 23 ליוני 2014 #

אוקיי, הנה מה שעשיתי:

$char = $package_name;
 for($i = 0; $i < strlen($char); $i++){
            if($i == strlen($char) - 1)
                $success = $success.ord($char[$i]);
            else
                $success = $success.ord($char[$i]).",";
        }
        echo "char(".$success.") $char";

מדפיס char(92,49) air.dynamitetrain שזה לא כל כך הגיוני...

אם אני מזין את הסטרינג ידנית לתוך המשתנה, מדפיס:
char(97,105,114,46,100,121,110,97,109,105,116,101,116,114,97,105,110) air.dynamitetrain

avatar ענה mmm ב 23 ליוני 2014 #

אוקיי, יש התקדמות, למעשה, הוא מחזיר באקסלש ואחד, שזה \1 (על פי ORD), שזה בעצם משתנה שלקחתי מpreg_replace.
הוא פשוט מזהה את זה בתור טקסט פשוט, העניין הוא שאם מדפיסים את זה מקבלים את הטקסט האמיתי... רעיונות?

עריכה: עברתי ל preg_replace_callback, הבעיה הסתדרה.